package com.niiwoo.civet.account.service.bill;

import com.niiwoo.civet.account.dto.request.StatisticUserBillAmountRequestDTO;
import com.niiwoo.civet.account.dto.response.GroupAmountByDayResponseDTO;
import com.niiwoo.civet.account.dto.response.GroupAmountByMonthResponseDTO;
import com.niiwoo.civet.account.dto.response.StatisticUserBillAmountReponseDTO;
import com.niiwoo.civet.account.enums.GroupUserBillAmountTypeEnum;

import java.math.BigDecimal;
import java.util.List;

/**
 * 用户账单统计
 * Created by xiaoyingping on 2018/11/7.
 */
public interface UserBillStatisticsDubboService {

    /**
     * 分类统计用户账单金额【只统计一种类型:BillAmountStatisticsEnum】
     * @param requestDTO
     * @return
     */
    BigDecimal statisticUserBillAmount(StatisticUserBillAmountRequestDTO requestDTO);

    /**
     * 分类统计用户账单金额【统计多种类型:List<BillAmountStatisticsEnum>】
     * @param requestDTO
     * @return
     */
    List<StatisticUserBillAmountReponseDTO> statisticUserBillAmounts(StatisticUserBillAmountRequestDTO requestDTO);

    /**
     * 按月分组统计账单金额
     *
     * @param userId     用户id
     * @param year       年度(yyyy)
     * @param amountType 需要统计的金额类型
     * @return List<GroupAmountByMonthResponseDTO>
     */
    List<GroupAmountByMonthResponseDTO> groupAmountByMonthForYear(String userId, String year, GroupUserBillAmountTypeEnum amountType);

    /**
     * 按天分组统计账单金额
     *
     * @param userId     用户id
     * @param year       月度(yyyyMM)
     * @param amountType 需要统计的金额类型
     * @return List<GroupAmountByDayResponseDTO>
     */
    List<GroupAmountByDayResponseDTO> groupAmountByDayForMonth(String userId, String year, GroupUserBillAmountTypeEnum amountType);


    /**
     * 指定某天统计账单金额
     *
     * @param userId     用户id
     * @param day       月度(yyyyMMdd)
     * @param amountType 需要统计的金额类型
     * @return GroupAmountByDayResponseDTO
     */
    GroupAmountByDayResponseDTO groupAmountOneDay(String userId, String day, GroupUserBillAmountTypeEnum amountType);
}
